安裝好 CUDA,如Cash所預期的, Fields,Pete,Moore 不約而同的跑來跟他抱怨他們喜愛或者被Gavin要求喜愛的 Mxnet, PyTorch, Tensorflow 根本不支援 Nvidia 官網提供的 CUDA 10.0 版。他們看能降階為 9.2 或是 9.0,但是他們彼此也在爭執哪個版本好,甚至有人冒出他看的範例程式是說要用 CUDA 8.0。
Cash 馬上提出法寶Docker來。他一開始跟大家談 Container 這種正式學名,Fields 又嚇了一大跳,幾天來好不容易懂點 Linux Server,現在又來什麼鬼 Container…。Cash改用不科學的說法:把他想成是一個輕量化的VM 好了,除了啟動那剎那需要注意一點細節,其他都不用多學習什麼。這樣幾乎讓大家滿意了。他請大家給他半小時安裝好 Docker(還需要安裝 Nvidia 提供的 runtime 叫做 nvidia-docker2,讓 Docker 可以動用到 GPU 的資源)
#移除掉可能安裝了舊版或是Ubuntu自帶的 Docker
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
#安裝後續所需抓Docker 安裝包所需的必要程式
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#讓系統信賴 Docker 安裝倉庫
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update
sudo apt-get install docker-ce
安裝結束後,執行一個最小的驗證來測試
sudo docker run hello-world
會出現下列的結果,第一次使用要先下載hello-world:latest 的 image費一點時間:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
d1725b59e92d: Pull complete
Digest: sha256:0add3ace90ecb4adbf7777e9aacf18357296e799f81cabc9fde470971e499788
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
…
緊接著要安裝Nvidia 的docker runtime:
# 嘗試移除 nvidia-docker 1.0版,以防萬一
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
# 加入nvidia-docker 2.0版軟體倉庫
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
# 安裝 nvidia-docker2
sudo apt-get install -y nvidia-docker2
#重新載入 Docker daemon
sudo pkill -SIGHUP dockerd
安裝好後可以啟動 cuda:9.0-base 這個container,執行 nvidia-smi 這個GPU監控程式
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
應該出現下列的畫面:
Fri Oct 26 09:46:56 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48 Driver Version: 410.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 108... Off | 00000000:01:00.0 Off | N/A |
| 0% 43C P8 12W / 280W | 8699MiB / 11178MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
每次要進 docker 還要加 sudo 很繁瑣,變通方法就是把會用到 Docker 軟體的人加入 『docker』這個群組
sudo groupadd docker #確認有無 docker 群組,沒有就會加上
sudo usermod -aG docker $USER #將現在登入系統的用戶加入 加入 『docker』這個群組
sudo usermod -aG docker pete #加 pete 入 『docker』這個群組
sudo usermod -aG docker molly
sudo usermod -aG docker moore
sudo usermod -aG docker fields
專案緣起記錄在 【UP, Scrum 與 AI專案】